package com.zjl.redis.第17章_缓存过期淘汰策略;

/**
 * redis内存满了咋办
 * OOM异常//
 *
 * 如果一个键是过期的，那它到了过期时间之后是不是马上就从内存中被删除呢?
 *    不是
 *    立即删除能保证内存中数据的最大新鲜度，因为它保证过期键值会在过期后马上被删除，
 *    其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的
 *    因为删除操作会占用cpu的时间，如果刚好碰上了cpu很忙的时候，
 *    比如正在做交集或排序等计算的时候，就会给cpu造成额外的压力，
 *    让CPU心累，时时需要删除，忙死。。。。。。。
 *
 *   ******** 这会产生大量的性能消耗，同时也会影响数据的读取操作。********
 *   有下列三种删除方式
 *   1.定时删除
 *   2.惰性删除：//从来没有被点中使用过
 *       惰性删除策略的缺点是，它对内存是最不友好的。
 *       数据到达过期时间，不做处理。等下次访问该数据时,
 *      如果未过期，返回数据     发现已过期，删除，返回不存在。
 *      在使用惰性删除策略时，如果数据库中有非常多的过期键，
 *      而这些过期键又恰好没有被访问到的话，那么它们也许永远也不会被删除
 *      (除非用户手动执行FLUSHDB)，
 *      我们甚至可以将这种情况看作是一种内存泄漏->无用的垃圾数据占用了大量的内存，
 *      而服务器却不会:自己去释放它们，
 *      这对运行状态非常依赖于内存的Redis服务器来说,肯定不是一个好消息
 *   3.定期删除//定期删除时，从来没有被抽查到
 *      定期删除策略每隔一段时间执行一次删除过期键操作，//随机抽样删除(可能会出现  过期的键一直抽查不到)
 *      并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响。
 *
 *   第2和3的删除规则  还是会有可能有大量的key堆积在内存中导致redis空间紧张
 *
 *
 */
public class B_过期删除方式 {
}
